package main // 声明主包

import (
	"encoding/json" // JSON 编码解码
	"net/http"      // HTTP 服务
	"strconv"       // 字符串转换
)

// Response 定义返回数据结构
type Response struct {
	Input  int `json:"input"`  // 原始输入
	Result int `json:"result"` // 计算结果
}

func main() {
	// 注册 /api/calc 路由和处理函数
	http.HandleFunc("/api/calc", func(w http.ResponseWriter, r *http.Request) {
		// 设置响应内容类型为 JSON
		w.Header().Set("Content-Type", "application/json")
		// 读取 URL 查询参数 num
		numStr := r.URL.Query().Get("num")
		// 尝试把 num 转为整数
		num, err := strconv.Atoi(numStr)
		if err != nil {
			// 转换失败返回错误信息
			http.Error(w, `{"error":"num必须是数字"}`, http.StatusBadRequest)
			return
		}
		// 计算 2*num + 1
		res := num*2 + 1
		// 构造响应对象
		rsp := Response{Input: num, Result: res}
		// 编码并写入响应
		json.NewEncoder(w).Encode(rsp)
	})

	// 提供 static 目录下的静态文件
	fs := http.FileServer(http.Dir("static"))
	http.Handle("/", fs)

	// 启动服务器，监听 8080 端口
	http.ListenAndServe(":8080", nil)
}
